Alex Bennée <alex.ben...@linaro.org> writes:
> Garrick Toubassi <gtouba...@gmail.com> writes: > >> I went ahead and created a short repro case which can be found at >> https://github.com/gtoubassi/qemu-spinrepro. Would appreciate >> thoughts from anyone or guidance on how to debug. > > Well something weird is going on that is chewing through the code > generation logic. If you run with: > > ./qemu-system-x86_64 -serial mon:stdio -kernel ~/Downloads/kernel.img > > And then C-a c to bring up the monitor you can type "info jit" and see: > > (qemu) info jit > Translation buffer state: > gen code size 1063758051/1073736704 > TB count 1 > TB avg target size 1 max=1 bytes > TB avg host size 64 bytes (expansion ratio: 64.0) > cross page TB count 0 (0%) > direct jump count 0 (0%) (2 jumps=0 0%) > TB hash buckets 1/8192 (0.01% head buckets used) > TB hash occupancy 0.00% avg chain occ. Histogram: [0.0,2.5)%|█ > ▁|[22.5,25.0]% > TB hash avg chain 1.000 buckets. Histogram: 1|█|1 > <snip> Hmm ok that's just a result of the code disappearing down a hole: 0x0009fffc: 00 00 addb %al, (%bx, %si) 0x0009fffe: 00 00 addb %al, (%bx, %si) 0x000a0000: ff .byte 0xff 0x000a0001: ff .byte 0xff and as that code is being executed out of a place without a phys_pc we don't cache the TB (by design). Usually this isn't a massive problem but obviously something has gone wrong in the code to be executing these junk instructions. Have you traced the execution of your code via gdbstub? -- Alex Bennée