Using a larger switch statement in C, I looked at the code that gcc produces and changed a few things in my assembly function. It now looks like below. This function works now, it actually jumps to label_02. When I try to put that function into a project that uses libtool to build a dynamic library however, I get the following linking error: /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/../../../../x86_64-pc-linux-gnu/bin/ld: ./.libs/libspamm_kernel.a(jump_table.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC ./.libs/libspamm_kernel.a(jump_table.o): could not read symbols: Bad value What does this error mean? Thanks, nick jump_table.S: .text .global jump_table .type jump_table, @function jump_table: # Push stack pointer so we can make room for local storage. push %rax mov $0x02, %rax # Move index into rax; 2 is supposed to end up at label_02. jmp *table(, %rax, 8) # Jump into the table. .section .rodata .align 8 table: .quad label_00 .quad label_01 .quad label_02 .text label_00: jmp done label_01: jmp done label_02: jmp done done: pop %rax ret .size jump_table, .-jump_table On 03/15/11 18:25, Brian Raiter wrote: >> I am trying to write a jump table, but unfortunately with limited >> success. When I compile the code and disassemble it, the offset of >> "table" is 0, which I guess means that something didn't work out. > > Actually, table appears immediately following your indirect jump > instruction, so I would assume that the offset would be zero. Did you > actually try this code to verify that it doesn't do what you expect? > > b > -- > To unsubscribe from this list: send the line "unsubscribe linux-assembly" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html
Attachment:
signature.asc
Description: OpenPGP digital signature
- References:
- writing a jump table
- From: Nicolas Bock
- Re: writing a jump table
- From: Brian Raiter
- writing a jump table
- Prev by Date: Re: writing a jump table
- Next by Date: Re: writing a jump table
- Previous by thread: Re: writing a jump table
- Next by thread: Re: writing a jump table
- Index(es):
![]() |