It's likely that the compiler will online it. But indeed it's better to add
-minline-all-stringops to the compiler command line.

Paolo

Il ven 19 mar 2021, 18:35 Stefano Garzarella <sgarz...@redhat.com> ha
scritto:

> On Fri, Mar 19, 2021 at 06:03:59PM +0100, Paolo Bonzini wrote:
> >On 19/03/21 15:06, Philippe Mathieu-Daudé wrote:
> >>>+
> >>>+/* Search RSDP signature. */
> >>>+static uintptr_t search_rsdp(uint32_t start_addr, uint32_t end_addr)
> >>>+{
> >>>+    uint64_t *rsdp_p;
> >>>+
> >>>+    /* RSDP signature is always on a 16 byte boundary */
> >>>+    for (rsdp_p = (uint64_t *)start_addr; rsdp_p < (uint64_t
> *)end_addr;
> >>>+         rsdp_p += 2) {
> >>>+        if (*rsdp_p == RSDP_SIGNATURE) {
> >>>+            return (uintptr_t)rsdp_p;
> >>>+        }
> >>>+    }
> >>>+
> >>>+    return 0;
> >>>+}
> >>gcc 10.2.1 "cc (Alpine 10.2.1_pre2) 10.2.1 20210313" reports:
> >>
> >>pc-bios/optionrom/pvh_main.c: In function 'search_rsdp':
> >>pc-bios/optionrom/pvh_main.c:61:21: warning: comparison is always false
> >>due to limited range of data type [-Wtype-limits]
> >>    61 |         if (*rsdp_p == RSDP_SIGNATURE) {
> >>       |                     ^~
> >
> >This is probably a different bug, but I'll also add that uint64_t is
> >supposed to be aligned to 64 bits, so you need either
> >__attribute__((packed)), or use char* and memcmp.  If you go for the
> >latter, it would fix the issue that Philippe is reporting.
>
> Yes, memcmp maybe is also more readable, but being baremetal, I have to
> implement it right?
>
> Thanks,
> Stefano
>
>

Reply via email to