lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 14 Feb 2020 19:05:57 -0500 From: Arvind Sankar <nivedita@...m.mit.edu> To: Fangrui Song <maskray@...gle.com> Cc: Arvind Sankar <nivedita@...m.mit.edu>, Nick Desaulniers <ndesaulniers@...gle.com>, jpoimboe@...hat.com, peterz@...radead.org, clang-built-linux@...glegroups.com, Nathan Chancellor <natechancellor@...il.com>, linux-kernel@...r.kernel.org Subject: Re: [PATCH] objtool: ignore .L prefixed local symbols On Fri, Feb 14, 2020 at 02:20:46PM -0800, Fangrui Song wrote: > On 2020-02-14, Arvind Sankar wrote: > > > >I was testing with hidden/protected visibility, I see you want this for > >the no-semantic-interposition case. Actually a bit more testing shows > >some peculiarities even with hidden visibility. With the below, the call > >and lea create relocations in the object file, but the jmp doesn't. ld > >does avoid creating a plt for this though. > > > > .text > > .globl foo, bar > > .hidden foo > > bar: > > call foo > > leaq foo(%rip), %rax > > jmp foo > > > > foo: ret > > Yes, GNU as is inconsistent here. While fixing > https://sourceware.org/ml/binutils/2020-02/msg00243.html , I noticed > that the rule is quite complex. There are definitely lots of places to > improve. clang 10 emits relocations consistently. > > call foo # R_X86_64_PLT32 > leaq foo(%rip), %rax # R_X86_64_PC32 > jmp foo # R_X86_64_PLT32 > I guess the reason why is that jmp instructions can be optimized to use 8-bit signed offset if the destination is close enough, so the assembler wants to go through them anyway to check, while such optimization is not possible for the call and lea. clang 9 emits no relocations for me, unless @PLT/@...PCREL is explicitly used. Has that changed? (Just using clang -o test.o test.s on that assembler, not too familiar with invokation syntax)
Powered by blists - more mailing lists