Merge tag 'objtool-core-2023-10-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull objtool updates from Ingo Molnar:
"Misc fixes and cleanups:
- Fix potential MAX_NAME_LEN limit related build failures
- Fix scripts/faddr2line symbol filtering bug
- Fix scripts/faddr2line on LLVM=1
- Fix scripts/faddr2line to accept readelf output with mapping
symbols
- Minor cleanups"
* tag 'objtool-core-2023-10-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
scripts/faddr2line: Skip over mapping symbols in output from readelf
scripts/faddr2line: Use LLVM addr2line and readelf if LLVM=1
scripts/faddr2line: Don't filter out non-function symbols from readelf
objtool: Remove max symbol name length limitation
objtool: Propagate early errors
objtool: Use 'the fallthrough' pseudo-keyword
x86/speculation, objtool: Use absolute relocations for annotations
x86/unwind/orc: Remove redundant initialization of 'mid' pointer in __orc_find()
This commit is contained in:
@@ -291,7 +291,7 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
|
||||
switch (modrm_reg & 7) {
|
||||
case 5:
|
||||
imm = -imm;
|
||||
/* fallthrough */
|
||||
fallthrough;
|
||||
case 0:
|
||||
/* add/sub imm, %rsp */
|
||||
ADD_OP(op) {
|
||||
@@ -375,7 +375,7 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
|
||||
break;
|
||||
}
|
||||
|
||||
/* fallthrough */
|
||||
fallthrough;
|
||||
case 0x88:
|
||||
if (!rex_w)
|
||||
break;
|
||||
@@ -656,7 +656,7 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
|
||||
break;
|
||||
}
|
||||
|
||||
/* fallthrough */
|
||||
fallthrough;
|
||||
|
||||
case 0xca: /* retf */
|
||||
case 0xcb: /* retf */
|
||||
|
||||
+6
-8
@@ -22,8 +22,6 @@
|
||||
#include <objtool/elf.h>
|
||||
#include <objtool/warn.h>
|
||||
|
||||
#define MAX_NAME_LEN 128
|
||||
|
||||
static inline u32 str_hash(const char *str)
|
||||
{
|
||||
return jhash(str, strlen(str), 0);
|
||||
@@ -515,7 +513,7 @@ static int read_symbols(struct elf *elf)
|
||||
/* Create parent/child links for any cold subfunctions */
|
||||
list_for_each_entry(sec, &elf->sections, list) {
|
||||
sec_for_each_sym(sec, sym) {
|
||||
char pname[MAX_NAME_LEN + 1];
|
||||
char *pname;
|
||||
size_t pnamelen;
|
||||
if (sym->type != STT_FUNC)
|
||||
continue;
|
||||
@@ -531,15 +529,15 @@ static int read_symbols(struct elf *elf)
|
||||
continue;
|
||||
|
||||
pnamelen = coldstr - sym->name;
|
||||
if (pnamelen > MAX_NAME_LEN) {
|
||||
WARN("%s(): parent function name exceeds maximum length of %d characters",
|
||||
sym->name, MAX_NAME_LEN);
|
||||
pname = strndup(sym->name, pnamelen);
|
||||
if (!pname) {
|
||||
WARN("%s(): failed to allocate memory",
|
||||
sym->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
strncpy(pname, sym->name, pnamelen);
|
||||
pname[pnamelen] = '\0';
|
||||
pfunc = find_symbol_by_name(elf, pname);
|
||||
free(pname);
|
||||
|
||||
if (!pfunc) {
|
||||
WARN("%s(): can't find parent function",
|
||||
|
||||
@@ -146,7 +146,5 @@ int main(int argc, const char **argv)
|
||||
exec_cmd_init("objtool", UNUSED, UNUSED, UNUSED);
|
||||
pager_init(UNUSED);
|
||||
|
||||
objtool_run(argc, argv);
|
||||
|
||||
return 0;
|
||||
return objtool_run(argc, argv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user