History

Merge branch 'master' into mm-nonmm-stable

akpm committed 4 years ago

Commit ee56c3e2 parents 00c9d56 03c765b661 files · +8401 −5638Browse files

Showing the changes to scripts (3 of 661 files). Show all

Unified · Split

3 files
  1. scripts/faddr2line +34 −11
  2. scripts/gen_autoksyms.sh +3 −0
  3. scripts/mod/modpost.c +1 −1
scripts/faddr2line+34−11
@@ -95,17 +95,25 @@ __faddr2line() { · 94 unmodified lines
9595 local print_warnings=$4
9696
9797 local sym_name=${func_addr%+*}
98− local offset=${func_addr#*+}
99− offset=${offset%/*}
98+ local func_offset=${func_addr#*+}
99+ func_offset=${func_offset%/*}
100100 local user_size=
101+ local file_type
102+ local is_vmlinux=0
101103 [[ $func_addr =~ "/" ]] && user_size=${func_addr#*/}
102104
103− if [[ -z $sym_name ]] || [[ -z $offset ]] || [[ $sym_name = $func_addr ]]; then
105+ if [[ -z $sym_name ]] || [[ -z $func_offset ]] || [[ $sym_name = $func_addr ]]; then
104106 warn "bad func+offset $func_addr"
105107 DONE=1
106108 return
107109 fi
108110
111+ # vmlinux uses absolute addresses in the section table rather than
112+ # section offsets.
113+ local file_type=$(${READELF} --file-header $objfile |
114+ ${AWK} '$1 == "Type:" { print $2; exit }')
115+ [[ $file_type = "EXEC" ]] && is_vmlinux=1
116+
109117 # Go through each of the object's symbols which match the func name.
110118 # In rare cases there might be duplicates, in which case we print all
111119 # matches.
@@ -114,9 +122,11 @@ __faddr2line() { · 2 unmodified lines
114122 local sym_addr=0x${fields[1]}
115123 local sym_elf_size=${fields[2]}
116124 local sym_sec=${fields[6]}
125+ local sec_size
126+ local sec_name
117127
118128 # Get the section size:
119− local sec_size=$(${READELF} --section-headers --wide $objfile |
129+ sec_size=$(${READELF} --section-headers --wide $objfile |
120130 sed 's/\[ /\[/' |
121131 ${AWK} -v sec=$sym_sec '$1 == "[" sec "]" { print "0x" $6; exit }')
122132
@@ -126,6 +136,17 @@ __faddr2line() { · 3 unmodified lines
126136 return
127137 fi
128138
139+ # Get the section name:
140+ sec_name=$(${READELF} --section-headers --wide $objfile |
141+ sed 's/\[ /\[/' |
142+ ${AWK} -v sec=$sym_sec '$1 == "[" sec "]" { print $2; exit }')
143+
144+ if [[ -z $sec_name ]]; then
145+ warn "bad section name: section: $sym_sec"
146+ DONE=1
147+ return
148+ fi
149+
129150 # Calculate the symbol size.
130151 #
131152 # Unfortunately we can't use the ELF size, because kallsyms
@@ -174,10 +195,10 @@ __faddr2line() { · 42 unmodified lines
174195
175196 sym_size=0x$(printf %x $sym_size)
176197
177− # Calculate the section address from user-supplied offset:
178− local addr=$(($sym_addr + $offset))
198+ # Calculate the address from user-supplied offset:
199+ local addr=$(($sym_addr + $func_offset))
179200 if [[ -z $addr ]] || [[ $addr = 0 ]]; then
180− warn "bad address: $sym_addr + $offset"
201+ warn "bad address: $sym_addr + $func_offset"
181202 DONE=1
182203 return
183204 fi
@@ -191,9 +212,9 @@ __faddr2line() { · 7 unmodified lines
191212 fi
192213
193214 # Make sure the provided offset is within the symbol's range:
194− if [[ $offset -gt $sym_size ]]; then
215+ if [[ $func_offset -gt $sym_size ]]; then
195216 [[ $print_warnings = 1 ]] &&
196− echo "skipping $sym_name address at $addr due to size mismatch ($offset > $sym_size)"
217+ echo "skipping $sym_name address at $addr due to size mismatch ($func_offset > $sym_size)"
197218 continue
198219 fi
199220
@@ -202,11 +223,13 @@ __faddr2line() { · 2 unmodified lines
202223 [[ $FIRST = 0 ]] && echo
203224 FIRST=0
204225
205− echo "$sym_name+$offset/$sym_size:"
226+ echo "$sym_name+$func_offset/$sym_size:"
206227
207228 # Pass section address to addr2line and strip absolute paths
208229 # from the output:
209− local output=$(${ADDR2LINE} -fpie $objfile $addr | sed "s; $dir_prefix\(\./\)*; ;")
230+ local args="--functions --pretty-print --inlines --exe=$objfile"
231+ [[ $is_vmlinux = 0 ]] && args="$args --section=$sec_name"
232+ local output=$(${ADDR2LINE} $args $addr | sed "s; $dir_prefix\(\./\)*; ;")
210233 [[ -z $output ]] && continue
211234
212235 # Default output (non --list):
scripts/gen_autoksyms.sh+3−0
@@ -56,4 +56,7 @@ EOT · 55 unmodified lines
5656 # point addresses.
5757 sed -e 's/^\.//' |
5858 sort -u |
59+# Ignore __this_module. It's not an exported symbol, and will be resolved
60+# when the final .ko's are linked.
61+grep -v '^__this_module$' |
5962 sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
scripts/mod/modpost.c+1−1
@@ -980,7 +980,7 @@ static const struct sectioncheck sectioncheck[] = { · 979 unmodified lines
980980 },
981981 /* Do not export init/exit functions or data */
982982 {
983− .fromsec = { "__ksymtab*", NULL },
983+ .fromsec = { "___ksymtab*", NULL },
984984 .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
985985 .mismatch = EXPORT_TO_INIT_EXIT,
986986 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t