diff options
| -rw-r--r-- | meta/recipes-devtools/elfutils/elfutils-0.164/libebl-Fix-missing-brackets-around-if-statement-body.patch | 419 | ||||
| -rw-r--r-- | meta/recipes-devtools/elfutils/elfutils_0.164.bb | 1 |
2 files changed, 420 insertions, 0 deletions
diff --git a/meta/recipes-devtools/elfutils/elfutils-0.164/libebl-Fix-missing-brackets-around-if-statement-body.patch b/meta/recipes-devtools/elfutils/elfutils-0.164/libebl-Fix-missing-brackets-around-if-statement-body.patch new file mode 100644 index 0000000000..8399133d79 --- /dev/null +++ b/meta/recipes-devtools/elfutils/elfutils-0.164/libebl-Fix-missing-brackets-around-if-statement-body.patch | |||
| @@ -0,0 +1,419 @@ | |||
| 1 | The upstream patch libebl/Changelog does not apply cleanly. | ||
| 2 | Modify the patch to skip that change only. | ||
| 3 | |||
| 4 | Upstream-Status: Backport | ||
| 5 | |||
| 6 | Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com> | ||
| 7 | |||
| 8 | From c5da7c9e08c2bdb6dba8e115dcc09ed51a07f0e4 Mon Sep 17 00:00:00 2001 | ||
| 9 | From: Mark Wielaard <mjw@redhat.com> | ||
| 10 | Date: Sat, 9 Jan 2016 22:09:48 +0100 | ||
| 11 | Subject: libebl: Fix missing brackets around if statement body. | ||
| 12 | MIME-Version: 1.0 | ||
| 13 | Content-Type: text/plain; charset=UTF-8 | ||
| 14 | Content-Transfer-Encoding: 8bit | ||
| 15 | |||
| 16 | GCC6 [will have] a nice new warning that showed a real bug: | ||
| 17 | |||
| 18 | elfutils/libebl/eblobjnote.c: In function ‘ebl_object_note’: | ||
| 19 | elfutils/libebl/eblobjnote.c:135:5: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation] | ||
| 20 | switch (type) | ||
| 21 | ^~~~~~ | ||
| 22 | |||
| 23 | elfutils/libebl/eblobjnote.c:45:3: note: ...this ‘if’ clause, but it is not | ||
| 24 | if (! ebl->object_note (name, type, descsz, desc)) | ||
| 25 | ^~ | ||
| 26 | |||
| 27 | And indeed, it should have been under the if, but wasn't because of missing | ||
| 28 | brackets. Added brackets (and reindent). | ||
| 29 | |||
| 30 | Signed-off-by: Mark Wielaard <mjw@redhat.com> | ||
| 31 | --- | ||
| 32 | libebl/eblobjnote.c | 362 ++++++++++++++++++++++++++-------------------------- | ||
| 33 | 2 files changed, 187 insertions(+), 180 deletions(-) | ||
| 34 | |||
| 35 | diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c | ||
| 36 | index fa1eb93..f80a1a5 100644 | ||
| 37 | --- a/libebl/eblobjnote.c | ||
| 38 | +++ b/libebl/eblobjnote.c | ||
| 39 | @@ -1,5 +1,5 @@ | ||
| 40 | /* Print contents of object file note. | ||
| 41 | - Copyright (C) 2002, 2007, 2009, 2011, 2015 Red Hat, Inc. | ||
| 42 | + Copyright (C) 2002, 2007, 2009, 2011, 2015, 2016 Red Hat, Inc. | ||
| 43 | This file is part of elfutils. | ||
| 44 | Written by Ulrich Drepper <drepper@redhat.com>, 2002. | ||
| 45 | |||
| 46 | @@ -43,189 +43,191 @@ ebl_object_note (Ebl *ebl, const char *name, uint32_t type, | ||
| 47 | uint32_t descsz, const char *desc) | ||
| 48 | { | ||
| 49 | if (! ebl->object_note (name, type, descsz, desc)) | ||
| 50 | - /* The machine specific function did not know this type. */ | ||
| 51 | + { | ||
| 52 | + /* The machine specific function did not know this type. */ | ||
| 53 | |||
| 54 | - if (strcmp ("stapsdt", name) == 0) | ||
| 55 | - { | ||
| 56 | - if (type != 3) | ||
| 57 | - { | ||
| 58 | - printf (gettext ("unknown SDT version %u\n"), type); | ||
| 59 | - return; | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - /* Descriptor starts with three addresses, pc, base ref and | ||
| 63 | - semaphore. Then three zero terminated strings provider, | ||
| 64 | - name and arguments. */ | ||
| 65 | - | ||
| 66 | - union | ||
| 67 | + if (strcmp ("stapsdt", name) == 0) | ||
| 68 | { | ||
| 69 | - Elf64_Addr a64[3]; | ||
| 70 | - Elf32_Addr a32[3]; | ||
| 71 | - } addrs; | ||
| 72 | + if (type != 3) | ||
| 73 | + { | ||
| 74 | + printf (gettext ("unknown SDT version %u\n"), type); | ||
| 75 | + return; | ||
| 76 | + } | ||
| 77 | |||
| 78 | - size_t addrs_size = gelf_fsize (ebl->elf, ELF_T_ADDR, 3, EV_CURRENT); | ||
| 79 | - if (descsz < addrs_size + 3) | ||
| 80 | - { | ||
| 81 | - invalid_sdt: | ||
| 82 | - printf (gettext ("invalid SDT probe descriptor\n")); | ||
| 83 | - return; | ||
| 84 | - } | ||
| 85 | + /* Descriptor starts with three addresses, pc, base ref and | ||
| 86 | + semaphore. Then three zero terminated strings provider, | ||
| 87 | + name and arguments. */ | ||
| 88 | |||
| 89 | - Elf_Data src = | ||
| 90 | + union | ||
| 91 | { | ||
| 92 | - .d_type = ELF_T_ADDR, .d_version = EV_CURRENT, | ||
| 93 | - .d_buf = (void *) desc, .d_size = addrs_size | ||
| 94 | - }; | ||
| 95 | - | ||
| 96 | - Elf_Data dst = | ||
| 97 | - { | ||
| 98 | - .d_type = ELF_T_ADDR, .d_version = EV_CURRENT, | ||
| 99 | - .d_buf = &addrs, .d_size = addrs_size | ||
| 100 | - }; | ||
| 101 | - | ||
| 102 | - if (gelf_xlatetom (ebl->elf, &dst, &src, | ||
| 103 | - elf_getident (ebl->elf, NULL)[EI_DATA]) == NULL) | ||
| 104 | - { | ||
| 105 | - printf ("%s\n", elf_errmsg (-1)); | ||
| 106 | - return; | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - const char *provider = desc + addrs_size; | ||
| 110 | - const char *pname = memchr (provider, '\0', desc + descsz - provider); | ||
| 111 | - if (pname == NULL) | ||
| 112 | - goto invalid_sdt; | ||
| 113 | - | ||
| 114 | - ++pname; | ||
| 115 | - const char *args = memchr (pname, '\0', desc + descsz - pname); | ||
| 116 | - if (args == NULL || | ||
| 117 | - memchr (++args, '\0', desc + descsz - pname) != desc + descsz - 1) | ||
| 118 | - goto invalid_sdt; | ||
| 119 | - | ||
| 120 | - GElf_Addr pc; | ||
| 121 | - GElf_Addr base; | ||
| 122 | - GElf_Addr sem; | ||
| 123 | - if (gelf_getclass (ebl->elf) == ELFCLASS32) | ||
| 124 | - { | ||
| 125 | - pc = addrs.a32[0]; | ||
| 126 | - base = addrs.a32[1]; | ||
| 127 | - sem = addrs.a32[2]; | ||
| 128 | - } | ||
| 129 | - else | ||
| 130 | - { | ||
| 131 | - pc = addrs.a64[0]; | ||
| 132 | - base = addrs.a64[1]; | ||
| 133 | - sem = addrs.a64[2]; | ||
| 134 | - } | ||
| 135 | - | ||
| 136 | - printf (gettext (" PC: ")); | ||
| 137 | - printf ("%#" PRIx64 ",", pc); | ||
| 138 | - printf (gettext (" Base: ")); | ||
| 139 | - printf ("%#" PRIx64 ",", base); | ||
| 140 | - printf (gettext (" Semaphore: ")); | ||
| 141 | - printf ("%#" PRIx64 "\n", sem); | ||
| 142 | - printf (gettext (" Provider: ")); | ||
| 143 | - printf ("%s,", provider); | ||
| 144 | - printf (gettext (" Name: ")); | ||
| 145 | - printf ("%s,", pname); | ||
| 146 | - printf (gettext (" Args: ")); | ||
| 147 | - printf ("'%s'\n", args); | ||
| 148 | - return; | ||
| 149 | - } | ||
| 150 | - | ||
| 151 | - switch (type) | ||
| 152 | - { | ||
| 153 | - case NT_GNU_BUILD_ID: | ||
| 154 | - if (strcmp (name, "GNU") == 0 && descsz > 0) | ||
| 155 | - { | ||
| 156 | - printf (gettext (" Build ID: ")); | ||
| 157 | - uint_fast32_t i; | ||
| 158 | - for (i = 0; i < descsz - 1; ++i) | ||
| 159 | - printf ("%02" PRIx8, (uint8_t) desc[i]); | ||
| 160 | - printf ("%02" PRIx8 "\n", (uint8_t) desc[i]); | ||
| 161 | - } | ||
| 162 | - break; | ||
| 163 | - | ||
| 164 | - case NT_GNU_GOLD_VERSION: | ||
| 165 | - if (strcmp (name, "GNU") == 0 && descsz > 0) | ||
| 166 | - /* A non-null terminated version string. */ | ||
| 167 | - printf (gettext (" Linker version: %.*s\n"), | ||
| 168 | - (int) descsz, desc); | ||
| 169 | - break; | ||
| 170 | - | ||
| 171 | - case NT_GNU_ABI_TAG: | ||
| 172 | - if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0) | ||
| 173 | - { | ||
| 174 | - Elf_Data in = | ||
| 175 | - { | ||
| 176 | - .d_version = EV_CURRENT, | ||
| 177 | - .d_type = ELF_T_WORD, | ||
| 178 | - .d_size = descsz, | ||
| 179 | - .d_buf = (void *) desc | ||
| 180 | - }; | ||
| 181 | - /* Normally NT_GNU_ABI_TAG is just 4 words (16 bytes). If it | ||
| 182 | - is much (4*) larger dynamically allocate memory to convert. */ | ||
| 183 | + Elf64_Addr a64[3]; | ||
| 184 | + Elf32_Addr a32[3]; | ||
| 185 | + } addrs; | ||
| 186 | + | ||
| 187 | + size_t addrs_size = gelf_fsize (ebl->elf, ELF_T_ADDR, 3, EV_CURRENT); | ||
| 188 | + if (descsz < addrs_size + 3) | ||
| 189 | + { | ||
| 190 | + invalid_sdt: | ||
| 191 | + printf (gettext ("invalid SDT probe descriptor\n")); | ||
| 192 | + return; | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + Elf_Data src = | ||
| 196 | + { | ||
| 197 | + .d_type = ELF_T_ADDR, .d_version = EV_CURRENT, | ||
| 198 | + .d_buf = (void *) desc, .d_size = addrs_size | ||
| 199 | + }; | ||
| 200 | + | ||
| 201 | + Elf_Data dst = | ||
| 202 | + { | ||
| 203 | + .d_type = ELF_T_ADDR, .d_version = EV_CURRENT, | ||
| 204 | + .d_buf = &addrs, .d_size = addrs_size | ||
| 205 | + }; | ||
| 206 | + | ||
| 207 | + if (gelf_xlatetom (ebl->elf, &dst, &src, | ||
| 208 | + elf_getident (ebl->elf, NULL)[EI_DATA]) == NULL) | ||
| 209 | + { | ||
| 210 | + printf ("%s\n", elf_errmsg (-1)); | ||
| 211 | + return; | ||
| 212 | + } | ||
| 213 | + | ||
| 214 | + const char *provider = desc + addrs_size; | ||
| 215 | + const char *pname = memchr (provider, '\0', desc + descsz - provider); | ||
| 216 | + if (pname == NULL) | ||
| 217 | + goto invalid_sdt; | ||
| 218 | + | ||
| 219 | + ++pname; | ||
| 220 | + const char *args = memchr (pname, '\0', desc + descsz - pname); | ||
| 221 | + if (args == NULL || | ||
| 222 | + memchr (++args, '\0', desc + descsz - pname) != desc + descsz - 1) | ||
| 223 | + goto invalid_sdt; | ||
| 224 | + | ||
| 225 | + GElf_Addr pc; | ||
| 226 | + GElf_Addr base; | ||
| 227 | + GElf_Addr sem; | ||
| 228 | + if (gelf_getclass (ebl->elf) == ELFCLASS32) | ||
| 229 | + { | ||
| 230 | + pc = addrs.a32[0]; | ||
| 231 | + base = addrs.a32[1]; | ||
| 232 | + sem = addrs.a32[2]; | ||
| 233 | + } | ||
| 234 | + else | ||
| 235 | + { | ||
| 236 | + pc = addrs.a64[0]; | ||
| 237 | + base = addrs.a64[1]; | ||
| 238 | + sem = addrs.a64[2]; | ||
| 239 | + } | ||
| 240 | + | ||
| 241 | + printf (gettext (" PC: ")); | ||
| 242 | + printf ("%#" PRIx64 ",", pc); | ||
| 243 | + printf (gettext (" Base: ")); | ||
| 244 | + printf ("%#" PRIx64 ",", base); | ||
| 245 | + printf (gettext (" Semaphore: ")); | ||
| 246 | + printf ("%#" PRIx64 "\n", sem); | ||
| 247 | + printf (gettext (" Provider: ")); | ||
| 248 | + printf ("%s,", provider); | ||
| 249 | + printf (gettext (" Name: ")); | ||
| 250 | + printf ("%s,", pname); | ||
| 251 | + printf (gettext (" Args: ")); | ||
| 252 | + printf ("'%s'\n", args); | ||
| 253 | + return; | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + switch (type) | ||
| 257 | + { | ||
| 258 | + case NT_GNU_BUILD_ID: | ||
| 259 | + if (strcmp (name, "GNU") == 0 && descsz > 0) | ||
| 260 | + { | ||
| 261 | + printf (gettext (" Build ID: ")); | ||
| 262 | + uint_fast32_t i; | ||
| 263 | + for (i = 0; i < descsz - 1; ++i) | ||
| 264 | + printf ("%02" PRIx8, (uint8_t) desc[i]); | ||
| 265 | + printf ("%02" PRIx8 "\n", (uint8_t) desc[i]); | ||
| 266 | + } | ||
| 267 | + break; | ||
| 268 | + | ||
| 269 | + case NT_GNU_GOLD_VERSION: | ||
| 270 | + if (strcmp (name, "GNU") == 0 && descsz > 0) | ||
| 271 | + /* A non-null terminated version string. */ | ||
| 272 | + printf (gettext (" Linker version: %.*s\n"), | ||
| 273 | + (int) descsz, desc); | ||
| 274 | + break; | ||
| 275 | + | ||
| 276 | + case NT_GNU_ABI_TAG: | ||
| 277 | + if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0) | ||
| 278 | + { | ||
| 279 | + Elf_Data in = | ||
| 280 | + { | ||
| 281 | + .d_version = EV_CURRENT, | ||
| 282 | + .d_type = ELF_T_WORD, | ||
| 283 | + .d_size = descsz, | ||
| 284 | + .d_buf = (void *) desc | ||
| 285 | + }; | ||
| 286 | + /* Normally NT_GNU_ABI_TAG is just 4 words (16 bytes). If it | ||
| 287 | + is much (4*) larger dynamically allocate memory to convert. */ | ||
| 288 | #define FIXED_TAG_BYTES 16 | ||
| 289 | - uint32_t sbuf[FIXED_TAG_BYTES]; | ||
| 290 | - uint32_t *buf; | ||
| 291 | - if (unlikely (descsz / 4 > FIXED_TAG_BYTES)) | ||
| 292 | - { | ||
| 293 | - buf = malloc (descsz); | ||
| 294 | - if (unlikely (buf == NULL)) | ||
| 295 | - return; | ||
| 296 | - } | ||
| 297 | - else | ||
| 298 | - buf = sbuf; | ||
| 299 | - Elf_Data out = | ||
| 300 | - { | ||
| 301 | - .d_version = EV_CURRENT, | ||
| 302 | - .d_type = ELF_T_WORD, | ||
| 303 | - .d_size = descsz, | ||
| 304 | - .d_buf = buf | ||
| 305 | - }; | ||
| 306 | - | ||
| 307 | - if (elf32_xlatetom (&out, &in, ebl->data) != NULL) | ||
| 308 | - { | ||
| 309 | - const char *os; | ||
| 310 | - switch (buf[0]) | ||
| 311 | - { | ||
| 312 | - case ELF_NOTE_OS_LINUX: | ||
| 313 | - os = "Linux"; | ||
| 314 | - break; | ||
| 315 | - | ||
| 316 | - case ELF_NOTE_OS_GNU: | ||
| 317 | - os = "GNU"; | ||
| 318 | - break; | ||
| 319 | - | ||
| 320 | - case ELF_NOTE_OS_SOLARIS2: | ||
| 321 | - os = "Solaris"; | ||
| 322 | - break; | ||
| 323 | - | ||
| 324 | - case ELF_NOTE_OS_FREEBSD: | ||
| 325 | - os = "FreeBSD"; | ||
| 326 | - break; | ||
| 327 | - | ||
| 328 | - default: | ||
| 329 | - os = "???"; | ||
| 330 | - break; | ||
| 331 | - } | ||
| 332 | - | ||
| 333 | - printf (gettext (" OS: %s, ABI: "), os); | ||
| 334 | - for (size_t cnt = 1; cnt < descsz / 4; ++cnt) | ||
| 335 | - { | ||
| 336 | - if (cnt > 1) | ||
| 337 | - putchar_unlocked ('.'); | ||
| 338 | - printf ("%" PRIu32, buf[cnt]); | ||
| 339 | - } | ||
| 340 | - putchar_unlocked ('\n'); | ||
| 341 | - } | ||
| 342 | - if (descsz / 4 > FIXED_TAG_BYTES) | ||
| 343 | - free (buf); | ||
| 344 | - break; | ||
| 345 | - } | ||
| 346 | - /* FALLTHROUGH */ | ||
| 347 | - | ||
| 348 | - default: | ||
| 349 | - /* Unknown type. */ | ||
| 350 | - break; | ||
| 351 | - } | ||
| 352 | + uint32_t sbuf[FIXED_TAG_BYTES]; | ||
| 353 | + uint32_t *buf; | ||
| 354 | + if (unlikely (descsz / 4 > FIXED_TAG_BYTES)) | ||
| 355 | + { | ||
| 356 | + buf = malloc (descsz); | ||
| 357 | + if (unlikely (buf == NULL)) | ||
| 358 | + return; | ||
| 359 | + } | ||
| 360 | + else | ||
| 361 | + buf = sbuf; | ||
| 362 | + Elf_Data out = | ||
| 363 | + { | ||
| 364 | + .d_version = EV_CURRENT, | ||
| 365 | + .d_type = ELF_T_WORD, | ||
| 366 | + .d_size = descsz, | ||
| 367 | + .d_buf = buf | ||
| 368 | + }; | ||
| 369 | + | ||
| 370 | + if (elf32_xlatetom (&out, &in, ebl->data) != NULL) | ||
| 371 | + { | ||
| 372 | + const char *os; | ||
| 373 | + switch (buf[0]) | ||
| 374 | + { | ||
| 375 | + case ELF_NOTE_OS_LINUX: | ||
| 376 | + os = "Linux"; | ||
| 377 | + break; | ||
| 378 | + | ||
| 379 | + case ELF_NOTE_OS_GNU: | ||
| 380 | + os = "GNU"; | ||
| 381 | + break; | ||
| 382 | + | ||
| 383 | + case ELF_NOTE_OS_SOLARIS2: | ||
| 384 | + os = "Solaris"; | ||
| 385 | + break; | ||
| 386 | + | ||
| 387 | + case ELF_NOTE_OS_FREEBSD: | ||
| 388 | + os = "FreeBSD"; | ||
| 389 | + break; | ||
| 390 | + | ||
| 391 | + default: | ||
| 392 | + os = "???"; | ||
| 393 | + break; | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + printf (gettext (" OS: %s, ABI: "), os); | ||
| 397 | + for (size_t cnt = 1; cnt < descsz / 4; ++cnt) | ||
| 398 | + { | ||
| 399 | + if (cnt > 1) | ||
| 400 | + putchar_unlocked ('.'); | ||
| 401 | + printf ("%" PRIu32, buf[cnt]); | ||
| 402 | + } | ||
| 403 | + putchar_unlocked ('\n'); | ||
| 404 | + } | ||
| 405 | + if (descsz / 4 > FIXED_TAG_BYTES) | ||
| 406 | + free (buf); | ||
| 407 | + break; | ||
| 408 | + } | ||
| 409 | + /* FALLTHROUGH */ | ||
| 410 | + | ||
| 411 | + default: | ||
| 412 | + /* Unknown type. */ | ||
| 413 | + break; | ||
| 414 | + } | ||
| 415 | + } | ||
| 416 | } | ||
| 417 | -- | ||
| 418 | cgit v0.12 | ||
| 419 | |||
diff --git a/meta/recipes-devtools/elfutils/elfutils_0.164.bb b/meta/recipes-devtools/elfutils/elfutils_0.164.bb index 4964c05078..2b23025ada 100644 --- a/meta/recipes-devtools/elfutils/elfutils_0.164.bb +++ b/meta/recipes-devtools/elfutils/elfutils_0.164.bb | |||
| @@ -20,6 +20,7 @@ SRC_URI += "\ | |||
| 20 | file://0001-fix-a-stack-usage-warning.patch \ | 20 | file://0001-fix-a-stack-usage-warning.patch \ |
| 21 | file://aarch64_uio.patch \ | 21 | file://aarch64_uio.patch \ |
| 22 | file://shadow.patch \ | 22 | file://shadow.patch \ |
| 23 | file://libebl-Fix-missing-brackets-around-if-statement-body.patch \ | ||
| 23 | " | 24 | " |
| 24 | 25 | ||
| 25 | # pick the patch from debian | 26 | # pick the patch from debian |
