Re: [webkit-dev] Encoding and decoding ProcessID
> On Feb 24, 2019, at 11:55 AM, Adrien Destugues > wrote: > > On Sun, Feb 24, 2019 at 10:52:53AM -0800, Sam Weinig wrote: >> Hi Adrien, >> >> Would you mind adding the compiler output when this happens? I’d like to see >> exactly what the error you are seeing is. > > Sorry, here is the compiler output: > http://paste.debian.net/1069971 > > In file included from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp: In > static member function 'static bool > WebKit::NetworkResourceLoadParameters::decode(IPC::Decoder&, > WebKit::NetworkResourceLoadParameters&)': > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:41: > error: no matching function for call to > 'IPC::Decoder::decode(WTF::ProcessID&)' > if (!decoder.decode(result.parentPID)) > ^ > In file included from > ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, > from > ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, > from > ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, > from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: > ../../Source/WebKit/Platform/IPC/Decoder.h:80:10: note: candidate: bool > IPC::Decoder::decode(bool&) > bool decode(bool&); > ^~ > ../../Source/WebKit/Platform/IPC/Decoder.h:80:10: note: conversion of > argument 1 would be ill-formed: > In file included from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: > error: cannot bind non-const lvalue reference of type 'bool&' to an rvalue of > type 'bool' > if (!decoder.decode(result.parentPID)) > ~~~^ > In file included from > ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, > from > ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, > from > ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, > from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: > ../../Source/WebKit/Platform/IPC/Decoder.h:82:10: note: candidate: bool > IPC::Decoder::decode(uint8_t&) > bool decode(uint8_t&); > ^~ > ../../Source/WebKit/Platform/IPC/Decoder.h:82:10: note: conversion of > argument 1 would be ill-formed: > In file included from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: > error: cannot bind non-const lvalue reference of type 'uint8_t& {aka unsigned > char&}' to an rvalue of type 'uint8_t {aka unsigned char}' > if (!decoder.decode(result.parentPID)) > ~~~^ > In file included from > ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, > from > ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, > from > ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, > from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: > ../../Source/WebKit/Platform/IPC/Decoder.h:84:10: note: candidate: bool > IPC::Decoder::decode(uint16_t&) > bool decode(uint16_t&); > ^~ > ../../Source/WebKit/Platform/IPC/Decoder.h:84:10: note: conversion of > argument 1 would be ill-formed: > In file included from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: > error: cannot bind non-const lvalue reference of type 'uint16_t& {aka short > unsigned int&}' to an rvalue of type 'uint16_t {aka short unsigned int}' > if (!decoder.decode(result.parentPID)) > ~~~^ > In file included from > ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, > from > ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, > from > ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, > from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: > ../../Source/WebKit/Platform/IPC/Decoder.h:86:10: note: candidate: bool > IPC::Decoder::decode(uint32_t&) > bool decode(uint32_t&); > ^~ > ../../Source/WebKit/Platform/IPC/Decoder.h:86:10: note: conversion of > argument 1 would be ill-formed: > In file included from > DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: > ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: > error: cannot bind non-const lvalue reference of type 'uint32_t& {aka > unsigned int&}' to an rvalue of type 'uint32_t {aka unsigned int}' > if (!decoder.decode(result.parentPID)) >
Re: [webkit-dev] Encoding and decoding ProcessID
On Sun, Feb 24, 2019 at 10:52:53AM -0800, Sam Weinig wrote: > Hi Adrien, > > Would you mind adding the compiler output when this happens? I’d like to see > exactly what the error you are seeing is. Sorry, here is the compiler output: http://paste.debian.net/1069971 In file included from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp: In static member function 'static bool WebKit::NetworkResourceLoadParameters::decode(IPC::Decoder&, WebKit::NetworkResourceLoadParameters&)': ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:41: error: no matching function for call to 'IPC::Decoder::decode(WTF::ProcessID&)' if (!decoder.decode(result.parentPID)) ^ In file included from ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, from ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, from ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: ../../Source/WebKit/Platform/IPC/Decoder.h:80:10: note: candidate: bool IPC::Decoder::decode(bool&) bool decode(bool&); ^~ ../../Source/WebKit/Platform/IPC/Decoder.h:80:10: note: conversion of argument 1 would be ill-formed: In file included from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: error: cannot bind non-const lvalue reference of type 'bool&' to an rvalue of type 'bool' if (!decoder.decode(result.parentPID)) ~~~^ In file included from ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, from ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, from ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: ../../Source/WebKit/Platform/IPC/Decoder.h:82:10: note: candidate: bool IPC::Decoder::decode(uint8_t&) bool decode(uint8_t&); ^~ ../../Source/WebKit/Platform/IPC/Decoder.h:82:10: note: conversion of argument 1 would be ill-formed: In file included from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: error: cannot bind non-const lvalue reference of type 'uint8_t& {aka unsigned char&}' to an rvalue of type 'uint8_t {aka unsigned char}' if (!decoder.decode(result.parentPID)) ~~~^ In file included from ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, from ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, from ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: ../../Source/WebKit/Platform/IPC/Decoder.h:84:10: note: candidate: bool IPC::Decoder::decode(uint16_t&) bool decode(uint16_t&); ^~ ../../Source/WebKit/Platform/IPC/Decoder.h:84:10: note: conversion of argument 1 would be ill-formed: In file included from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: error: cannot bind non-const lvalue reference of type 'uint16_t& {aka short unsigned int&}' to an rvalue of type 'uint16_t {aka short unsigned int}' if (!decoder.decode(result.parentPID)) ~~~^ In file included from ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, from ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, from ../../Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp:29, from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:1: ../../Source/WebKit/Platform/IPC/Decoder.h:86:10: note: candidate: bool IPC::Decoder::decode(uint32_t&) bool decode(uint32_t&); ^~ ../../Source/WebKit/Platform/IPC/Decoder.h:86:10: note: conversion of argument 1 would be ill-formed: In file included from DerivedSources/WebKit/unified-sources/UnifiedSource-72468c22-2.cpp:5:0: ../../Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:117:32: error: cannot bind non-const lvalue reference of type 'uint32_t& {aka unsigned int&}' to an rvalue of type 'uint32_t {aka unsigned int}' if (!decoder.decode(result.parentPID)) ~~~^ In file included from ../../Source/WebKit/NetworkProcess/Downloads/DownloadID.h:30:0, from ../../Source/WebKit/NetworkProcess/Downloads/Download.h:28, from
Re: [webkit-dev] Encoding and decoding ProcessID
Hi Adrien, Would you mind adding the compiler output when this happens? I’d like to see exactly what the error you are seeing is. - Sam > On Feb 24, 2019, at 9:54 AM, Adrien Destugues > wrote: > > Hi there, > > We are finally starting to look into moving the Haiku port to WebKit2. > > We have hit one little problem I'm not sure how to solve. Our pid_t on > 32bit Haiku is declared as a signed long integer (this is for legacy > reasons and not something we can fix easily). Our uint32_t is a signed > integer (not long). This creates a compilation error when using pid_t > with IPC::Encoder, because none of the encode() functions match when > trying to pass a pid_t in our case. > > Our options seems to be: > - Cast pid_t to int32_t when encoding it. I fear this would break other > platforms if they decide to use a 64bit pid_t, for example > - Add an encode(pid_t) to the IPC::Encoder. I fear on other platforms it > would complain that this is the same as encode(int32_t) and break the > build > - Define WTF::ProcessID as int32_t instead of pid_t, which I think could > work, afte rfixing some compiler warnings (we will need to cast back > to pid_t when passing it to OS functions, I think) > > What do you think about it? > > one example where encoding a pid is > Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp > > -- > Adrien. > ___ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev ___ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] Encoding and decoding ProcessID
On Sun, Feb 24, 2019 at 9:55 AM Adrien Destugues wrote: > We are finally starting to look into moving the Haiku port to WebKit2. > > We have hit one little problem I'm not sure how to solve. Our pid_t on > 32bit Haiku is declared as a signed long integer (this is for legacy > reasons and not something we can fix easily). Our uint32_t is a signed > integer (not long). This creates a compilation error when using pid_t > with IPC::Encoder, because none of the encode() functions match when > trying to pass a pid_t in our case. > > Our options seems to be: > - Cast pid_t to int32_t when encoding it. I fear this would break other > platforms if they decide to use a 64bit pid_t, for example > We definitely don't want to do this for the reason you stated. - Add an encode(pid_t) to the IPC::Encoder. I fear on other platforms it > would complain that this is the same as encode(int32_t) and break the > build > We may want to wrap pid_t in a struct when passing around IPC. That would work around this problem. - Define WTF::ProcessID as int32_t instead of pid_t, which I think could > work, afte rfixing some compiler warnings (we will need to cast back > to pid_t when passing it to OS functions, I think) > We definitely don't want to do this for the same reason as the first. Note that because 32-bit UI process on macOS would start 64-bit WebContent process, it's very important that every IPC message explicitly specifies the size of POD types. We can't, for example, use uintptr_t whose size varies between 32-bit and 64-bit builds on macOS in our IPC code. - R. Niwa ___ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev
[webkit-dev] Encoding and decoding ProcessID
Hi there, We are finally starting to look into moving the Haiku port to WebKit2. We have hit one little problem I'm not sure how to solve. Our pid_t on 32bit Haiku is declared as a signed long integer (this is for legacy reasons and not something we can fix easily). Our uint32_t is a signed integer (not long). This creates a compilation error when using pid_t with IPC::Encoder, because none of the encode() functions match when trying to pass a pid_t in our case. Our options seems to be: - Cast pid_t to int32_t when encoding it. I fear this would break other platforms if they decide to use a 64bit pid_t, for example - Add an encode(pid_t) to the IPC::Encoder. I fear on other platforms it would complain that this is the same as encode(int32_t) and break the build - Define WTF::ProcessID as int32_t instead of pid_t, which I think could work, afte rfixing some compiler warnings (we will need to cast back to pid_t when passing it to OS functions, I think) What do you think about it? one example where encoding a pid is Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp -- Adrien. ___ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev