On 23.03.20 08:15, Christian Borntraeger wrote:
> [...]
>
>>> +int s390_ipl_prepare_pv_header(void)
>>> +{
>>> + IplParameterBlock *ipib = s390_ipl_get_iplb_pv();
>>> + IPLBlockPV *ipib_pv = &ipib->pv;
>>> + void *hdr = g_malloc(ipib_pv->pv_header_len);
>>> + int rc;
>>> +
>>> + cpu_physical_memory_read(ipib_pv->pv_header_addr, hdr,
>>> + ipib_pv->pv_header_len);
>>> + rc = s390_pv_set_sec_parms((uint64_t)hdr,
>>> + ipib_pv->pv_header_len);
>> This causes a compiler issue when building for 32 bit x86 as follows:
>>
>> /home/abuild/rpmbuild/BUILD/qemu-4.2.0/hw/s390x/ipl.c: In function
>> 's390_ipl_prepare_pv_header':
>> /home/abuild/rpmbuild/BUILD/qemu-4.2.0/hw/s390x/ipl.c:659:32: error:
>> cast from pointer to integer of different size [-Werror=pointer-to-int-
>> cast]
>> 659 | rc = s390_pv_set_sec_parms((uint64_t)hdr,
>> | ^
>
> Interesting. It seems that there is no travis-ci coverage for this
> case.
>
> I guess we need something like this.
>
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 1d04cd5..01bdf81 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -656,7 +656,7 @@ int s390_ipl_prepare_pv_header(void)
>
> cpu_physical_memory_read(ipib_pv->pv_header_addr, hdr,
> ipib_pv->pv_header_len);
> - rc = s390_pv_set_sec_parms((uint64_t)hdr,
> + rc = s390_pv_set_sec_parms((uint64_t)(unsigned long) hdr,
> ipib_pv->pv_header_len);
uint_ptr instead of long is probably even better (for Windows).